#ifndef WEBREQUESTBASE_H
#define WEBREQUESTBASE_H

#include <QString>
#include <QWebEngineView>

enum EWebResponseType
{
    wrtNone,
    wrtProcessPercent100,
    wrtLoadFinished,
};

class ScriptCallback1;

class WebRequestBase
{
public:
    WebRequestBase(void* _pmvWebEngineView, QWebEngineView* _pweView, QString _strKeyword);

protected:
    void* FpmvWebEngineView;
    QWebEngineView* FpweView;
    QString FstrKeyword;

public:
    // ZC: 现在发送/设置什么样子的URL
    virtual void Request(int iType) = 0;

    // ZC: URL加载完成的方式是什么样子的（是process达到100%就触发，还是loadFinished事件触发时触发？）
    // ZC: 多次相同事件触发时间间隔过短，可以选择忽略
    // ZC: 返回值(毫秒数): >=0:调用处理函数[0: 立即调用; >0: QTimer::singleShot(...)方式调用]; <0:不调用处理函数
    virtual int IfResponse_byType(EWebResponseType _type) = 0;

    // ZC: 网页加载完成 采取什么样子的操作
    // ZC: 返回值：是否成功处理。true:处理掉了，别的类无需再处理; false:这个类没有处理掉，留给别的类处理
    virtual bool Response() = 0;

    virtual void JsReturn(int _iJsType, const QVariant &result, ScriptCallback1* _pScriptCallback) = 0;
};


class ScriptCallback1
{
public:
    ScriptCallback1(WebRequestBase *_webRequestBase, int _iJsType):
        FwebRequestBase(_webRequestBase), FiJsType(_iJsType)
    {
        qDebug() << "ScriptCallback1()" << this;
    }
    ~ScriptCallback1()
    {
        qDebug() << "~ScriptCallback1()" << this;
    }

public:
    WebRequestBase *FwebRequestBase;
    int FiJsType;

public:
    void operator()(const QVariant &result)
    {
        qDebug() << "ScriptCallback1 -- result.type():" << result.type() << this;
        if (FwebRequestBase != NULL)
            FwebRequestBase->JsReturn(FiJsType, result, this);
    }
};

#endif // WEBREQUESTBASE_H
